/*
 * GUIObject.h
 *
 *  Created on: 20/10/2009
 *      Author: marcos
 */

#ifndef GUIOBJECT_H_
#define GUIOBJECT_H_

#include <string>
#include "util/MathUtils.h"

namespace gui {
// 158 pixeles es el ancho de una calle, aprox 10 mts
const static int METERS_TO_PIXEL_RATIO = 2;
int toPixels(double v);

class GUIObject {
public:
	GUIObject();

	virtual ~GUIObject();

	// Getters
	virtual int getRColor();

	virtual int getGColor();

	virtual int getBColor();

	int getXPos();

	int getYPos();

	int getHeight();

	int getWidth();

	virtual std::string getTexture();

	virtual int getTextureTransparentColorR();

	virtual int getTextureTransparentColorG();

	virtual int getTextureTransparentColorB();

	virtual bool getTextureNoRepeat();

	virtual bool getTextureHasTransparentColor();

	virtual double getRotation();

	// Setters
	virtual void setBGColor(int r, int g, int b);

	virtual void setTexture(std::string texture, bool noRepeat);

	virtual void setTexture(std::string texture, int transparentColorR, int transparentColorG, int transparentColorB, bool noRepeat);

	virtual void setRotation(double rotation);

protected:
	void setOffsetInMeters(double x, double y);
	void setCenterInMeters(double x, double y);
	void setSizeInMeters(double w, double h);
	void setSize(int w, int h);

private:
	// tanto la posicion como el tamaño en píxeles se maneja únicamente en GUIObject, los hijos setean estos
	// valores en metros
	void setPosition(int x, int y);

	int rColor;
	int gColor;
	int bColor;
	int xPos;
	int yPos;
	int width;
	int height;
	std::string texture;
	int textureTransparentColorR;
	int textureTransparentColorG;
	int textureTransparentColorB;
	bool noRepeat;
	bool hasTransparentColor;
	double rotation;

};

}

#endif /* GUIOBJECT_H_ */
